package com.qiyebox.common.utils.http;

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.tea.TeaException;

public class OCRUtils {


    public static com.aliyun.alimt20181012.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露，并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式，更多鉴权访问方式请参见：https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId("LTAI5tGm6RrMiA7JVwD2gWJQ")
                // 必填，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret("BeThEzcd4aUVmKdnKx4TrkzVNOdlzH");
        // Endpoint 请参考 https://api.aliyun.com/product/alimt
        config.endpoint = "mt.aliyuncs.com";
        return new com.aliyun.alimt20181012.Client(config);
    }

    public static String parseRes(String imageUrl) throws Exception {

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("model", "qwen-vl-ocr");
        JSONArray messages = new JSONArray();
        jsonObject.put("messages", messages);
        JSONObject message = new JSONObject();
        messages.add(message);
        message.put("role", "user");
        JSONArray contents = new JSONArray();
        message.put("content", contents);
        JSONObject j1 = new JSONObject();
        j1.put("type", "image_url");
        JSONObject image = new JSONObject();
        image.put("url", imageUrl);
        j1.put("image_url", image);
        j1.put("min_pixels", 3136);
        j1.put("max_pixels", 1003520);
        contents.add(j1);
        j1 = new JSONObject();
        j1.put("type", "text");
        j1.put("text", "Read all the text in the image.");
        contents.add(j1);
        String res = HttpUtil.createPost("https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions")
                .header("Authorization", "Bearer sk-24e54874138c427c9ddc12fc554661ff")
                .header("Content-Type", "application/json")
                .body(jsonObject.toJSONString()).execute().body();

        System.out.println(res);
        JSONObject resJsons = JSONObject.parseObject(res);
        JSONArray jsonArray = resJsons.getJSONArray("choices");
        return  jsonArray.getJSONObject(0).getJSONObject("message").getString("content");
    }


    public static String translationTools(String content) throws Exception {
        com.aliyun.alimt20181012.Client client = OCRUtils.createClient();
        com.aliyun.alimt20181012.models.TranslateGeneralRequest translateGeneralRequest = new com.aliyun.alimt20181012.models.TranslateGeneralRequest()
                .setFormatType("text")
                .setSourceLanguage("en")
                .setTargetLanguage("zh")
                .setSourceText(content)
                .setScene("general");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            com.aliyun.alimt20181012.models.TranslateGeneralResponse resp = client.translateGeneralWithOptions(translateGeneralRequest, runtime);
//            com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(resp));
            return com.aliyun.teautil.Common.toJSONString(resp.getBody().getData().getTranslated());
        } catch (TeaException error) {
            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
            return error.getMessage();
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
            return error.getMessage();
        }

    }

    public static void main(String[] args) throws Exception {
        translationTools("");
    }
}
